package com.cy.pj.common.pool;

import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/*
    构建一个对象池类型，将此类型的对象交给spring管理
*/
@Lazy//spring框架提供的一个用于定义延迟加载特定的一个注解
@Scope("singleton")//"singLeton"作用域的类的同名实例在内存中只能有一份，这样的实例会存储到池
                    //"prototype"为多例作用域，对象何时使用何时创建，不会存入到池
@Component
public class ObjectPool {
    //定义无参数构造函数，其目的是监控spring框架何时构建此类的对象
    public ObjectPool(){//假设此对象为一个对象池
        System.out.println("ObjectPool()");
    }

    //对象生命周期方法
    //@PostConstruct 注解描述的方法为生命周期初始化方法,在对象构建以后执行.
    @PostConstruct
    public void init(){
        System.out.println("init()");
    }
    //@PreDestroy 注解描述的方法为生命周期销毁方法,此方法所在的对象,
    // 假如存储到了spring容器,
    // 那这个对象在从spring容器移除之前会
    // 先执行这个生命周期销毁方法(prototype作用域对象不执行此方法).
    @PreDestroy
    public void destory(){
        System.out.println("destory()");
    }
}
